/**
* @date 2017年2月28日
*/
package com.basicsys.modules.sys.controller;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.multipart.MultipartFile;

import com.basicsys.common.utils.FtpUtil;
import com.basicsys.modules.sys.entity.SysUserEntity;
import com.basicsys.modules.sys.entity.TConfigEntity;
import com.basicsys.modules.sys.service.TConfigService;

@Controller
public class BaseController{

	protected static HttpServletRequest request;
	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
	protected HttpServletResponse response;
	
	@Autowired
	private  TConfigService tConfigService;
	
	protected HttpSession session;
	protected String basicpath;
	
	private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
            60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
            10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
            -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
            38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
            -1, -1 };
	@ModelAttribute
	public void initController(HttpServletRequest request, HttpServletResponse response) {
		this.request = request;
		this.response = response;
		this.session = request.getSession();
		this.basicpath = request.getSession().getServletContext().getRealPath("/");
	}
	
	protected SysUserEntity getUser() {
		return (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
	}

	protected Long getUserId() {
		return getUser().getUserId();
	}

	protected Long getDeptId() {
		return getUser().getDeptId();
	}
	
	
	protected void writeJSONStr(String str) {
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		response.setHeader("Access-Control-Allow-Origin","*");
		response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); 
		response.setHeader("Access-Control-Max-Age", "3600"); //设置过期时间 
		response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization"); 
		response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1. 
		response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0"); 
		PrintWriter out = null;
		try {
			out = this.response.getWriter();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		out.write(str);
	}

	protected void writeJSONPStr(String str, String call) {
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		PrintWriter out = null;
		try {
			out = response.getWriter();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			out.print("" + call + "(" + str + ")");
			out.flush();
			if (out != null) {
				out.close();
			}
		}
	}
	
	/**
	 * 单张图上传
	 * @return
	 */
	public  String imgUpload(MultipartFile file){
		String result = "";
		String path = "";
		if(file != null && file.getSize() > 0){
				 String ct = file.getContentType();
				 String regex="\\/(jpeg)|(jpg)|(png)|(gif)|(JPEG)|(JPG)|(PNG)|(GIF)|(mp4)|(rmvb)|(avi)|(3gp)|(wmv)|(flv)|(txt)|(doc)|(docx)|(xls)|(xlsx)|(ppt)|(pdf)|(pptx)|(bmp)|(BMP)";
				 Pattern pattern = Pattern.compile(regex);
				 Matcher matcher =  pattern.matcher(ct);
				 if(matcher.find()){
					result = FtpUtil.fileUpload(request, file);
					Map<String,Object> map = new HashMap<>();
					map.put("cname", "project_path_prefix");
					map.put("stat", 1);	
					List<TConfigEntity> list = tConfigService.queryListnums(map);
				    path = list.get(0).getCvalue()+ result;
				 }else{
					 
					 
				 }
				 }
		
		return path; 
				}
	
	
	
	public  String fileUpload(MultipartFile file){
		String result = "";
		String path = "";
		if(file != null && file.getSize() > 0){
				 String ct = file.getContentType();
				 String regex="\\/(jpeg)|(jpg)|(png)|(gif)|(JPEG)|(JPG)|(PNG)|(GIF)|(mp4)|(rmvb)|(avi)|(3gp)|(wmv)|(flv)|(txt)|(doc)|(docx)|(xls)|(xlsx)|(ppt)|(pdf)|(pptx)|(bmp)|(BMP)";
				 Pattern pattern = Pattern.compile(regex);
				 Matcher matcher =  pattern.matcher(ct);
				 if(matcher.find()){
					result = FtpUtil.fileUpload(request, file);
					Map<String,Object> map = new HashMap<>();
					map.put("cname", "project_path_prefix");
					map.put("stat", 1);
					List<TConfigEntity> list = tConfigService.queryListnums(map);
				    path = list.get(0).getCvalue()+ result;
				 }else{
					 
					 
				 }
				 }
		
		return path; 
				}
	
	
	    /**
	     * 解密
	     * 
	     * @param str
	     * @return
	     * @throws UnsupportedEncodingException 
	     */
	    public static String decode(String str) throws UnsupportedEncodingException {
	        byte[] data = str.getBytes();
	        int len = data.length;
	        ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
	        int i = 0;
	        int b1, b2, b3, b4;

	        while (i < len) {
	            do {
	                b1 = base64DecodeChars[data[i++]];
	            } while (i < len && b1 == -1);
	            if (b1 == -1) {
	                break;
	            }

	            do {
	                b2 = base64DecodeChars[data[i++]];
	            } while (i < len && b2 == -1);
	            if (b2 == -1) {
	                break;
	            }
	            buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));

	            do {
	                b3 = data[i++];
	                if (b3 == 61) {
	                    return new String(buf.toByteArray());
	                }
	                b3 = base64DecodeChars[b3];
	            } while (i < len && b3 == -1);
	            if (b3 == -1) {
	                break;
	            }
	            buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));

	            do {
	                b4 = data[i++];
	                if (b4 == 61) {
	                    return new String(buf.toByteArray());
	                }
	                b4 = base64DecodeChars[b4];
	            } while (i < len && b4 == -1);
	            if (b4 == -1) {
	                break;
	            }
	            buf.write((int) (((b3 & 0x03) << 6) | b4));
	        }
	        return new String(buf.toByteArray());
	    }
	
	
	
}

